package global

import "sync"

/**
	全局配置
 */
type ConfigGlobal struct {
	Namespace string `json:"namespace"` //该服务的命名空间
	Zookeeper string `json:"zookeeper"` //连接zookeeper地址
	Tasks []*Task `json:"tasks"`//任务列表
}

/**
	某个任务的配置项
 */
type Task struct {

	TaskId string `json:"taskId"` //任务ID
	TaskName string `json:"taskName"`//任务名称
	TaskCommond string `json:"taskCommond"`//任务的具体描述
	IsUse bool `json:"isUse"`//此任务是否在使用，false表示此任务暂时不启动
	Cron string `json:"cron"`//定时任务，勾兑服务一般都是一天执行一次的
	Thread int `json:"thread"` //执行该任务的协程数量，做到并行执行
	Db1Src *DbSrc `json:"db1-src"`//需要进行勾兑的第一个源数据库
	Db2Src *DbSrc `json:"db2-src"`//需要进行勾兑的第二个源数据库
	DBDest *DbDest `json:"db-dest"`//存储差异数据的咪表数据库（勾兑差异）
	JoinKey map[string][]string `json:"join-key"` //两个源勾兑，关联的key，多个key，通过下划线关联 （ssxx_xfhgg_dkghg_nvhfh_jgk_dkgjf_0001_）
}

/**
	勾兑需要的源数据源相关配置
 */
type DbSrc struct {

	Ip string `json:"ip"` //数据源的ip地址
	Port string `json:"port"`//数据源的port
	UserName string `json:"username"`//连接数据源的UserName
	PassWord string `json:"password"` //连接数据源的密码
	BeforeSql string `json:"before-sql"`//前置检查语句，要求和DBSRC保持同一个数据库。如果配置了，表示此项能查询到数据，才可以继续任务
	CharacterEncoding string `json:"characterEncoding"`//连接数据库时使用的中文编码
	Database string `json:"database"`//数据库名称
	Table string `json:"table"` //表名
	Key string `json:"key"` //表的主键，勾兑成功后的数据回写需要用刀此字段
	MaxOpenConns int `json:"maxOpenConns"`//最大连接数
	MaxIdleConns int `json:"maxIdleConns"`//最大活跃连接数
	SuccessReWrite map[string]string `json:"successReWrite"` //勾兑完成后反写的字段
	FailReWrite map[string]string `json:"failReWrite"` //勾兑失败后进行状态回写的字段
	Column string `json:"column"` //要查询的列，字段之间使用逗号隔开，如果不配置此项，则默认查询select *
	Condition string `json:"condition"` //查询勾兑数据的条件。就是 where 后面要拼写的半个sql
}

/**
	存储勾兑差异的目标数据库的配置
 */
type DbDest struct {
	Ip string `json:"ip"` //数据源的ip地址
	Port string `json:"port"`//数据源的port
	UserName string `json:"username"`//连接数据源的UserName
	PassWord string `json:"password"` //连接数据源的密码
	BeforeSql string `json:"before-sql"`//前置执行语句，如果配置了，会在运行任务前先执行这个sql。
	CharacterEncoding string `json:"characterEncoding"`//连接数据库时使用的中文编码
	Database string `json:"database"`//数据库名称
	Table string `json:"table"` //表名
	MaxOpenConns int `json:"maxOpenConns"`//最大连接数
	MaxIdleConns int `json:"maxIdleConns"`//最大活跃连接数
	Cloumn []string `json:"column"`//存储勾兑差异数据的每一个列的集合
	Db1Mapping map[string]string `json:"db1-mapping"`//源表1列与dbdest表的一一映射关系
	Db2Mapping map[string]string `json:"db2-mapping"`//源表2列与dbdest表的一一映射关系
}
/**
	全局变量
 */
var (
	ConfigFile string
	config     *ConfigGlobal
	configLock = new(sync.RWMutex)
)